package com.wyf.springmvc.controller;

import com.wyf.springmvc.po.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

/**
 * 参数绑定
 */
@Controller
public class ParamsController {

    /**
     * 基本数据类型
     *   1. 传递的参数名与方法的形参名保持一致
     *   2. 如果参数未传递或参数为null时，会报500异常
     */
    @RequestMapping("p01")
    public void param01(int age, double money) {
        System.out.println("age " + age + ", money: " + money);
    }

    /**
     * 基本数据类型
     *   1. 传递的参数名与方法的形参名保持一致
     *   2. 如果参数未传递或参数为null时，会报500异常
     *
     * 可以通过@RequestParam注解设置参数的相关信息（注解声明在形参前面）
     *   1. 通过属性defaultValue设置参数的默认值（防止基本类型的参数未传递时500异常）
     *   2. 通过属性name 设置参数的别名
     */
    @RequestMapping("p02")
    public void param02(@RequestParam(defaultValue = "18", name = "uage") int age, @RequestParam(defaultValue = "100") double money) {
        System.out.println("age " + age + ", money: " + money);
    }

    /**
     * 包装类型（如果数据时基本数据类型，建议使用对应的包装类）
     *   1. 传递的参数名与方法的形参名保持一致
     *   2. 如果参数未传递，默认值为null
     */
    @RequestMapping("p03")
    public void param03(Integer age, Double money) {
        System.out.println("age " + age + ", money: " + money);
    }

    /**
     * 字符串类型
     *   1. 传递的参数名与方法的形参名保持一致
     *   2. 可以接收空值
     */
    @RequestMapping("p04")
    public void param04(String msg) {
        System.out.println("msg: " + msg);
    }

    /**
     * 数组类型数据绑定
     *   传递参数格式：ids=1&ids=2&ids=3
     *   参数名和形参名一致
     */
    @RequestMapping("p05")
    public void param05(String[] ids) {
        if (ids.length <= 0) return;
        for (String id : ids) {
            System.out.println(id);
        }
    }

    /**
     * JavaBean 数据绑定
     *   客户端请求的桉树与JavaBean对象的属性字段名保持一致
     *   参数名与JavaBean对象中的属性名保持一致（自动将参数设置到JavaBean中）
     *   url:http://localhost:8080/springmvc-01/p06?userId=1&userName=wyf&userPwd=888888&userEmail=aa@bb.com
     */
    @RequestMapping("p06")
    public void param06(User user) {
        System.out.println(user);
    }

    /**
     * List 类型
     *   User 实体需要定义对饮的list属性。（对于集合的参数绑定，一定要使用JavaBean对象进行封装）
     */
    @RequestMapping("p07")
    public void param07(User user) {
        System.out.println(user);
    }

    /**
     * Set 类型
     */
    @RequestMapping("/p08")
    public void param08(User user) {
        System.out.println(user);
    }
}
